<template>
    <view class="pages-technician">
        <!-- <back></back> -->
        <fixed :initHeight="configInfo.coach_format">
            <view class="fix-info fill-body rel" :style="{ height: '124rpx' }">
                <view
                    class="search-info fill-base pd-lg abs"
                    style="border-radius: 0 0 40rpx 40rpx"
                >
                    <search
                        @input="toSearch"
                        type="input"
                        :keyword="param.coach_name"
                        :padding="0"
                        :radius="30"
                        backgroundColor="#F0F0F0"
                        :placeholder="'请输入' + $t('action.attendantName') + '姓名'"
                    >
                    </search>
                </view>
            </view>
        </fixed>

        <block v-if="list.data && list.data.length > 0">
            <view class="mt-md ml-md mr-md" v-for="(item, index) in list.data" :key="index">
                <technician-list-item
                    @comment="toShowPopup(index, 'message')"
                    @collect="toCollect(index)"
                    @order="toShowPopup(index, 'technician')"
                    :info="item"
                >
                </technician-list-item>
            </view>
        </block>

        <!-- #ifdef H5 -->
        <load-more
            :noMore="list.current_page >= list.last_page && list.data.length > 0"
            :loading="loading"
            v-if="loading"
        >
        </load-more>
        <abnor v-if="!loading && list.data.length <= 0 && list.current_page == 1"></abnor>
        <!-- #endif -->
        <!-- #ifndef H5 -->
        <load-more
            :noMore="list.current_page >= list.last_page && list.data.length > 0 && location.lng"
            :loading="loading"
            v-if="loading"
        >
        </load-more>
        <abnor
            v-if="!loading && list.data.length <= 0 && list.current_page == 1 && location.lng"
        ></abnor>
        <abnor
            @confirm="toOpenLocation"
            :tip="[{ text: '定位失败，请开启地理位置授权后刷新页面重试~', color: 0 }]"
            :button="[{ text: '开启定位', type: 'confirm' }]"
            btnSize=""
            v-if="!loading && !location.lng"
        >
        </abnor>
        <!-- #endif -->

        <view class="space-footer"></view>

        <technician-list-popup
            ref="technician_list_popup"
            :sid="options.id"
        ></technician-list-popup>
    </view>
</template>

<script>
import { mapState, mapActions, mapMutations } from "vuex";
import technicianListItem from "@/components/technician-list-item.vue";
import technicianListPopup from "@/components/technician-list-popup.vue";
export default {
    components: {
        technicianListItem,
        technicianListPopup,
    },
    data() {
        return {
            isLoad: false,
            options: {},
            activeIndex: 0,
            param: {
                page: 1,
                coach_name: "",
            },
            list: {
                data: [],
            },
            loading: true,
            lockTap: false,
        };
    },
    computed: mapState({
        pageActive: (state) => state.technician.pageActive,
        tabList: (state) => state.technician.tabList,
        primaryColor: (state) => state.config.configInfo.primaryColor,
        subColor: (state) => state.config.configInfo.subColor,
        configInfo: (state) => state.config.configInfo,
        loginType: (state) => state.user.loginType,
        userInfo: (state) => state.user.userInfo,
        location: (state) => state.user.location,
        isGzhLogin: (state) => state.user.isGzhLogin,
        haveShieldOper: (state) => state.user.haveShieldOper,
    }),
    async onLoad(options) {
        this.options = options;
        // #ifndef H5

        this.$util.showLoading();
        // #endif
        await this.initIndex();
        this.$util.setNavigationBarColor({
            bg: this.primaryColor,
        });
        uni.setNavigationBarTitle({
            title: this.$t("action.attendantName") + "列表",
        });
    },
    onPullDownRefresh() {
        // #ifndef APP-PLUS
        uni.showNavigationBarLoading();
        // #endif
        this.initRefresh();
        uni.stopPullDownRefresh();
    },
    onReachBottom() {
        if (this.list.current_page >= this.list.last_page || this.loading) return;
        this.param.page = this.param.page + 1;
        this.loading = true;
        this.getList();
    },
    methods: {
        ...mapActions(["getConfigInfo", "getUserInfo"]),
        ...mapMutations(["updateUserItem"]),
        async initIndex(refresh = false) {
            // #ifdef H5
            if (!refresh && this.$jweixin.isWechat()) {
                await this.$jweixin.initJssdk();
                this.$jweixin.wxReady(() => {
                    this.$jweixin.hideOptionMenu();
                });
            }
            // #endif
            if (!this.configInfo.id || refresh) {
                await this.getConfigInfo();
            }
            await this.getList();
        },
        initRefresh() {
            this.param.page = 1;
            this.initIndex(true);
        },
        toOpenLocation() {
            this.$util.checkAuth({
                type: "userLocation",
            });
            // #ifdef APP-PLUS
            uni.getSystemInfo({
                success: (sys) => {
                    if (sys.platform == "ios") {
                        plus.runtime.openURL("app-settings://");
                    } else {
                        var main = plus.android.runtimeMainActivity();
                        var Intent = plus.android.importClass("android.content.Intent");
                        //可能应该直接进入应用列表的权限设置？=> android.settings.APPLICATION_SETTINGS
                        var mIntent = new Intent("android.settings.LOCATION_SOURCE_SETTINGS");
                        main.startActivity(mIntent);
                    }
                },
            });
            // #endif
        },
        toSearch(val) {
            this.param.coach_name = val;
            this.getList(1);
        },
        async getList(flag = 0, refresh = false, change = 0) {
            if (flag) {
                this.param.page = 1;
            }
            let { location } = this;
            if (!location.lat || (location.lat && location.address == "定位失败")) {
                // #ifdef H5
                if (this.$jweixin.isWechat()) {
                    this.$util.showLoading();
                    // await this.$jweixin.initJssdk();
                    await this.$jweixin.wxReady2();
                    let { lat = "", lng = "" } = location;
                    if (!lat && !lng) {
                        let { latitude, longitude } = await this.$jweixin.getWxLocation();
                        lat = latitude;
                        lng = longitude;
                        location = {
                            lng,
                            lat,
                            address: "定位失败",
                            province: "",
                            city: "",
                            district: "",
                        };
                    }
                    if (lat && lng) {
                        let key = `${lat},${lng}`;
                        let data = await this.$api.base.getMapInfo({
                            location: key,
                        });
                        let { status, result } = JSON.parse(data);
                        if (status == 0) {
                            let { address, address_component } = result;
                            let { province, city, district } = address_component;
                            location = {
                                lng,
                                lat,
                                address,
                                province,
                                city,
                                district,
                            };
                        }
                    }
                }
                // #endif
                // #ifndef H5
                location = await this.$util.getBmapLocation();
                // #endif
                this.updateUserItem({
                    key: "location",
                    val: location,
                });
            }
            let { lng = 0, lat = 0 } = location;

            let { list: oldList, tabList, activeIndex } = this;
            let { id: store_id } = this.options;
            let param = this.$util.deepCopy(this.param);
            param = Object.assign({}, param, {
                lng,
                lat,
                store_id,
            });

            let { coach_format = 1 } = this.configInfo;

            if (coach_format == 1) {
                param.type = tabList[activeIndex].id;
            }

            let methodModel = coach_format == 1 ? "serviceCoachList" : "typeServiceCoachList";

            let newList = await this.$api.service[methodModel](param);
            if (this.param.page == 1) {
                this.list = newList;
            } else {
                newList.data = oldList.data.concat(newList.data);
                this.list = newList;
            }
            this.loading = false;
            this.$util.hideAll();
        },
        handerTabChange(index) {
            this.activeIndex = index;

            this.$util.showLoading();
            uni.pageScrollTo({
                scrollTop: 0,
            });
            this.getList(1);
        },
        async toShowPopup(index, key) {
            this.$refs.technician_list_popup.toShowPopup(this.list.data[index], key);
        },
        async toCollect(index) {
            let { id, is_collect, collect_num } = this.list.data[index];
            let methodModel = is_collect ? "delCollect" : "addCollect";
            await this.$api.mine[methodModel]({
                coach_id: id,
            });
            this.$util.showToast({
                title: is_collect ? "取消成功" : "收藏成功",
            });
            this.list.data[index].is_collect = is_collect == 1 ? 0 : 1;
            this.list.data[index].collect_num = is_collect == 1 ? collect_num - 1 : collect_num + 1;
        },
    },
};
</script>

<style lang="scss"></style>
